package com.ls.fw.data.utils;

import com.ls.fw.data.bean.Column;
import com.ls.fw.data.bean.Table;
import com.ls.fw.data.exception.DataException;


/**
 * 字段名称处理器
 * @author ls
 * 2014年12月5日下午3:14:17
 */
public class FieldNameHander {

	public static final String prefix = "hz";
	
	public static final String joiner = "_";
	
	
	/**
	 * 生成字段名
	 * @author ls
	 * 2014年12月5日下午2:55:41 
	 * @param table
	 * @param column
	 * @return
	 */
	public static String generateName(final Table table, final Column column){
		return generateName(table, column.getName());
	}
	
	
	public static String generateName(final Table table, final String name){
		if(table==null){
			throw new DataException("要操作的表信息不能为空！");
		}
		return generateName(table.getSchemaName(), table.getName(), name);
	}
	
	
	
	
	/**
	 * 生成字段名
	 * @author ls
	 * 2014年12月5日下午3:05:07 
	 * @param scheamName
	 * @param tableName
	 * @param name
	 * @return
	 */
	public static String generateName(String scheamName, String tableName, final String name){
		if(name.startsWith(joiner) || name.equals("id")){
			return name;
		} 
		return prefix+joiner+check(scheamName)+joiner+check(tableName)+joiner+prefix+joiner+name;
	}
	

	private static String check(String name){
		if(name==null || name.equals("")){
			throw new DataException("名称不能为空！");
		}
		if(name.equals(prefix)){
			throw new DataException("hz为关键字，不能被使用！请更换名称！");
		}
		return name;
	}
	
	/**
	 * 解析字段名称
	 * @author ls
	 * 2014年12月5日下午3:10:57 
	 * @param name
	 * @param table
	 * @return
	 */
	public static String resloveName(String name, final Table table){
		if(table == null){
			return name;
		}
		return resloveName(name, table.getSchemaName(), table.getName());
	}
	
	
	/**
	 * 解析字段名称
	 * @author ls
	 * 2014年12月5日下午3:11:09 
	 * @param name
	 * @param scheamName
	 * @param tableName
	 * @return
	 */
	public static String resloveName(String name, String scheamName, String tableName){
		if(!name.startsWith(prefix)){
			return name;
		}
		String prefixStr = prefix+joiner+scheamName+joiner+tableName+joiner+prefix+joiner;
		String str = name.replaceFirst(prefixStr, "");
		return str;
	}
	
	public static String resloveName(String name){
		if(!name.startsWith(prefix)){
			return name;
		}
	    int beginIndex = name.indexOf(prefix, prefix.length());
	    if(beginIndex>-1){
		    String str = name.substring(beginIndex+prefix.length()+joiner.length());
			return str;
	    }
	    return name;
	}
	
	
	public static void main(String[] args) {
		Table t = new Table("schemaName", "name");
		String str = FieldNameHander.generateName(t, "f");
		System.out.println(str);
		System.out.println(FieldNameHander.resloveName(str, t));
		
		System.out.println(FieldNameHander.resloveName(str));
		str = "hz_asdfasf";
		System.out.println(FieldNameHander.resloveName(str));
	}
}
